const errorHandler = (err, req, res, next) => {
  console.error('[ERROR] 错误详情:', {
    path: req.path,
    method: req.method,
    error: err.message,
    stack: err.stack
  });

  // 处理数据库错误
  if (err.code === 'ER_NO_REFERENCED_ROW' || err.code === 'ER_ROW_IS_REFERENCED') {
    return res.status(400).json({
      code: 400,
      message: '数据关联错误，请检查相关数据是否存在'
    });
  }

  if (err.code === 'ER_DUP_ENTRY') {
    return res.status(400).json({
      code: 400,
      message: '数据已存在，请勿重复操作'
    });
  }

  // 处理参数错误
  if (err.message && err.message.includes('must not contain undefined')) {
    return res.status(400).json({
      code: 400,
      message: '请求参数不完整'
    });
  }

  // 处理JWT错误
  if (err.name === 'JsonWebTokenError') {
    return res.status(401).json({
      code: 401,
      message: '无效的授权令牌'
    });
  }

  if (err.name === 'TokenExpiredError') {
    return res.status(401).json({
      code: 401,
      message: '登录已过期，请重新登录'
    });
  }

  // 默认错误处理
  const statusCode = res.statusCode === 200 ? 500 : res.statusCode;
  res.status(statusCode).json({
    code: statusCode,
    message: err.message || '服务器内部错误',
    ...(process.env.NODE_ENV !== 'production' && { stack: err.stack })
  });
};

module.exports = errorHandler;